#include<iostream>//折半插入排序
#include<cstdio>
#include<cstring>
using namespace std;
int a[10000],b[10000];
int sfind(int l,int r,int key)
{
    int le=l,re=r;
    if(l==r)
    {
        if(a[l]<key)return l;
        else return l-1;
    }
    int mid;
    while(re>le)
    {
        mid=(le+re)/2;
        if(a[mid]>key)re=mid;
        else if(a[mid]<key)le=mid+1;
        else return le;
    }
    if(a[le]<key)return le;
    else return le-1;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=2;i<=n;i++)
    {
        int j=sfind(1,i-1,a[i]);
        for(int k=1;k<=j;k++)b[k]=a[k];
        b[j+1]=a[i];
        for(int k=j+1;k<i;k++)b[k+1]=a[k];
        for(int k=1;k<=i;k++)a[k]=b[k];
    }
    for(int i=1;i<=n;i++)cout<<a[i]<<' ';
    cout<<endl;
}//与直接插入排序相比，减少了查找所用时间，但每次移动元素时间不变，所以算法时间复杂度O(n^2) 空间复杂度O(1)